home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / MCASM.RAR / MC_ASM.EXE / WROX_ASM / CH9 / PROTECT / CHECK.ASM next >
Assembly Source File  |  1994-05-24  |  3KB  |  157 lines

  1. dosseg
  2. .model small
  3. .stack 100h
  4. .data
  5.  
  6. DPT        db    11 dup(?)
  7.  
  8. MyName        db 'Written by Kiselyov J.V. & Malakhov K.A., Inc. ',0
  9.         db 256-48 dup (0)
  10. Prg        db 'protect_dsk',10
  11.         db 256-12 dup (0)
  12. Version        db 'Version 1.0',0
  13.         db   256-12 dup (0)
  14.  
  15. bootsec        dw 256    dup (?)
  16. buffdisk    db 256    dup (?)
  17.  
  18. oldint1eh    dd    ?
  19.  
  20. drive        db    0
  21. new_sectsize    db    1
  22. boot_tracks    db    ?
  23.  
  24. messerr        db 'Error reading',10,13,'$'
  25. messerr1    db 'This disk is not a keydisk !',10,13,'$'
  26. messerr2    db 'Error reading track','$'
  27. messok        db 'Everything went Ok.',10,13,'$'  
  28.  
  29. .code
  30.         mov    ax,@data
  31.         mov    ds,ax
  32.         mov    es,ax
  33. ; Reset controller
  34.         xor    ah,ah
  35.         int    13h
  36. ; Read BOOT sector
  37.         lea    bx,bootsec
  38.         mov    ax,0201h
  39.         mov    dl,drive
  40.         xor    dh,dh
  41.         mov    cx,1
  42.         int    13h
  43.         jnc    @@pass_010
  44.         lea    dx,messerr
  45.         jmp    @@pass_err1
  46. ; Store some parameters of disk
  47. @@pass_010:
  48.         mov    ax,word ptr es:[bx+13h]
  49.         mov    cx,word ptr es:[bx+18h]
  50.         xor    dx,dx
  51.         div    cx
  52.         mov    cx,word ptr es:[bx+1ah]
  53.         xor    dx,dx
  54.         div    cx
  55.         mov    boot_tracks,al
  56. ; Get address of disk parameter table
  57.         mov    ax,351eh
  58.         int    21h
  59. ; Store old int 1eh address
  60.         push    ds
  61.         push    ds
  62.         mov    ax,es
  63.         mov    word ptr oldint1eh+2,ax
  64.         mov    word ptr oldint1eh,bx
  65. ; Copy DPT to the buffer DPT
  66.         mov    ds,ax
  67.         pop    es
  68.         mov    si,bx
  69.         lea    di,DPT
  70.         mov    cx,11
  71.     rep    movsb
  72.         pop    ds
  73. ; Modify "sector size" field
  74.         lea    di,DPT
  75.         mov    al,new_sectsize
  76.         mov    byte ptr es:[di+3],al
  77. ; Set new DPT
  78.         lea    dx,DPT
  79.         mov    ax,251eh
  80.         int    21h
  81. ; Compare passcode
  82.         lea    bx,buffdisk
  83.         mov    cl,01h
  84.         call    ReadDisk
  85.         jnc    no_err2
  86.         lea    dx,messerr2
  87.         jmp    exitprg
  88. no_err2:
  89.         lea    si,buffdisk
  90.         lea    di,MyName
  91.         mov    cx,48
  92.         repe    cmpsb
  93.         je    go_ok2
  94.         lea    dx,messerr1
  95.         jmp    exitprg
  96. go_ok2:
  97.         lea    bx,buffdisk
  98.         mov    cl,02h
  99.         call    ReadDisk
  100.         jnc    no_err3
  101.         lea    dx,messerr2
  102.         jmp    exitprg
  103. no_err3:
  104.         lea    si,buffdisk
  105.         lea    di,Prg
  106.         mov    cx,12
  107.         repe    cmpsb
  108.         je    go_ok3
  109.         lea    dx,messerr1
  110.         jmp    exitprg
  111. go_ok3:
  112.         lea    bx,buffdisk
  113.         mov    cl,03h
  114.         call    ReadDisk
  115.         jnc    no_err4
  116.         lea    dx,messerr2
  117.         jmp    exitprg
  118. no_err4:
  119.         lea    si,buffdisk
  120.         lea    di,Version
  121.         mov    cx,12
  122.         repe    cmpsb
  123.         je    go_ok4
  124.         lea    dx,messerr1
  125.         jmp    exitprg
  126. go_ok4:
  127.         lea    dx,messok
  128. exitprg:    
  129.         mov    ah,9
  130.         int    21h
  131.  
  132. ; Restore previous DPT
  133.         mov    ax,word ptr oldint1eh+2
  134.         mov    dx,word ptr oldint1eh
  135.         mov    ds,ax
  136.         mov    ax,251eh
  137.         int    21h
  138. exitprg1:
  139.         mov    ax,4c00h
  140.         int    21h
  141. @@pass_err1:    mov    ah,9
  142.         int    21h
  143.         mov    ax,4c01h
  144.         int    21h
  145. ; Read
  146. ReadDisk    proc    near
  147.         mov    AH,02h
  148.         mov    AL,01h
  149.         mov    CH,boot_tracks
  150.         mov    DL,drive
  151.         xor    dh,dh
  152.         int    13h
  153.         ret
  154. ReadDisk    endp
  155.  
  156.         end
  157.